package com.biscuit.page.basicservice.websocket.ai_chat;

import com.biscuit.page.basicservice.utils.BaseVerifyUtil;

import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;

/**
 * @author biscuit
 * @create 2024年08月01日 9:26
 */
public class AiChatSessionWebSocketHandler {

    // ai sessionId ： context
    private final static Map<Long, AiChatSessionWebSocketContext> WEB_SOCKET_MAP = new ConcurrentHashMap<>();

    // websocket sessionId ：ai sessionId
    private final static Map<String, Long> MAPPING_MAP = new HashMap<>();

    public static AiChatSessionWebSocketContext getContext(Long sessionId) {
        return WEB_SOCKET_MAP.get(sessionId);
    }

    public static AiChatSessionWebSocketContext getContextByMapping(String sessionId) {
        Long sessionIdForAi = MAPPING_MAP.get(sessionId);
        return BaseVerifyUtil.verifyNumberFullValid(sessionIdForAi) ? WEB_SOCKET_MAP.get(sessionIdForAi) : null;
    }

    public static void addContext(AiChatSessionWebSocketContext context) {
        WEB_SOCKET_MAP.put(context.getSessionId(), context);
        MAPPING_MAP.put(context.getSession().getId(), context.getSessionId());
    }

    public static void remove(Long sessionIdForAi) {
        AiChatSessionWebSocketContext context = getContext(sessionIdForAi);
        if (Objects.isNull(context)) return;
        MAPPING_MAP.remove(context.getSession().getId());
        WEB_SOCKET_MAP.remove(context.getSessionId());
    }

    public static void remove(String sessionIdForWebSocket) {
        AiChatSessionWebSocketContext context = getContextByMapping(sessionIdForWebSocket);
        if (Objects.isNull(context)) return;
        MAPPING_MAP.remove(context.getSession().getId());
        WEB_SOCKET_MAP.remove(context.getSessionId());
    }

}
